﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using AccesoDatos;
using AccesoDatos.Manejador;
using AccesoDatos.Objetos;
using System.Runtime.InteropServices;
using System.IO;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;

namespace RMA.Pantallas
{
    public partial class frmSucursalConsulta : Form
    {
        ManejadorSucuralPrincipal msp = new ManejadorSucuralPrincipal();
        clsConsultaSucursal objRep = new clsConsultaSucursal();
        
        private int _Suc;
        private string _User;
        byte[] DatoImagen = null;

        public frmSucursalConsulta(int Suc,string User)
        {
            InitializeComponent();
            _Suc = Suc;
            _User = User;
        }

        private void frmSucursalConsulta_Load(object sender, EventArgs e)
        {
            CargarDatos("", _User, _Suc);
        }

        private void CargarDatos(string Filtro,string nombre,int Suc) 
        {
            dgvSucPrincipal.DataSource = msp.GetConsultaPrincipal(Filtro,nombre,Suc);
            foreach (DataGridViewColumn ca in dgvSucPrincipal.Columns)
            {
                ca.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
            }
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            CargarDatos(txtBuscar.Text.Trim(), _User, _Suc);
        }

        private void dgvSucPrincipal_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.ColumnIndex != 0 && e.RowIndex >= 0)
            {
                try
                {
                    objRep.Folio = dgvSucPrincipal[0, e.RowIndex].Value.ToString();
                    objRep.Fecha = dgvSucPrincipal[1, e.RowIndex].Value.ToString();
                    objRep.Codigo = dgvSucPrincipal[2, e.RowIndex].Value.ToString();
                    objRep.Serie = dgvSucPrincipal[4, e.RowIndex].Value.ToString();
                    objRep.Factura = dgvSucPrincipal[6, e.RowIndex].Value.ToString();
                    objRep.FechaFac = dgvSucPrincipal[7, e.RowIndex].Value.ToString();
                    objRep.Falla = dgvSucPrincipal[8, e.RowIndex].Value.ToString();
                    objRep.CliID = dgvSucPrincipal[12, e.RowIndex].Value.ToString();
                    objRep.Nombre = dgvSucPrincipal[13, e.RowIndex].Value.ToString().Trim();
                    objRep.ProductoRep = dgvSucPrincipal[9, e.RowIndex].Value.ToString().Trim();
                    objRep.CostoRep = dgvSucPrincipal[11, e.RowIndex].Value.ToString().Trim();
                    btnReposicion.Visible = true;
                    btnSubir.Visible = true;
                    btnImprimir.Visible = true;
                }
                catch
                {

                }
            }
        }

        private void btnReposicion_Click(object sender, EventArgs e)
        {

            if ((objRep.ProductoRep == null || objRep.ProductoRep == "") && (objRep.CostoRep == null || objRep.CostoRep == "" || decimal.Parse(objRep.CostoRep) >= 0))
            {
                System.Threading.Thread t = new System.Threading.Thread(new System.Threading.ThreadStart(ThreadProc));
                t.Start();
                this.Close();
                btnImprimir.Visible = false;
                btnReposicion.Visible = false;
                btnSubir.Visible = false;
            }
            else
            {
                MessageBox.Show("Esta Orden ya tiene Reposicion Asignada", "Alerta",MessageBoxButtons.OK,MessageBoxIcon.Exclamation);
                btnImprimir.Visible = false;
                btnReposicion.Visible = false;
                btnSubir.Visible = false;
            }
        }

        public  void ThreadProc() 
        {
            Application.Run(new frmReposicion(objRep,_Suc,_User));
        }

        private void btnImprimir_Click(object sender, EventArgs e)
        {
            btnImprimir.Visible = false;
            btnReposicion.Visible = false;
            btnSubir.Visible = false;
            frmReporteReposicion Rep = new frmReporteReposicion(objRep.Folio, objRep.Factura);
            Rep.ShowDialog();
        }

        private void btnSubir_Click(object sender, EventArgs e)
        {
            btnImprimir.Visible = false;
            btnReposicion.Visible = false;
            btnSubir.Visible = false;

            bool FirmaReposicion;

            OpenFileDialog openFileDialog = new OpenFileDialog();
            openFileDialog.InitialDirectory = "C:\\";
            openFileDialog.Filter = "Imagenes (JPEG,GIF,BMP,PNG,ICO)|*.jpg;*.jpeg;*.gif;*.bmp;*.png"; //formatos soportados
            openFileDialog.RestoreDirectory = true;
            openFileDialog.Title = "Seleccione Imagen";

            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
                string dir = openFileDialog.FileName;
                Image image = Image.FromFile(dir);
                image = this.Redimensionar(image, 30, 30);
                image.Dispose();
                DatoImagen = ConvierteImagen(dir);
                if (DatoImagen != null) 
                {
                    if (FirmaReposicion = msp.GuardaFirma(objRep.Folio, DatoImagen))
                    {
                        MessageBox.Show("Se Guardo La imagen");
                    }
                    else 
                    {
                        MessageBox.Show("Ocurrio un error al Guardar Imagen.");
                    }
                }
                
            }
        }

        private Image Redimensionar(Image Imagen, int Ancho, int Alto, int resolucion)
        {
            //Bitmap sera donde trabajaremos los cambios
            using (Bitmap imagenBitmap = new Bitmap(Ancho, Alto, PixelFormat.Format32bppRgb))
            {
                imagenBitmap.SetResolution(resolucion, resolucion);
                //Hacemos los cambios a ImagenBitmap usando a ImagenGraphics y la Imagen Original(Imagen)
                //ImagenBitmap se comporta como un objeto de referenciado
                using (Graphics imagenGraphics = Graphics.FromImage(imagenBitmap))
                {
                    imagenGraphics.SmoothingMode = SmoothingMode.AntiAlias;
                    imagenGraphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
                    imagenGraphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
                    imagenGraphics.DrawImage(Imagen, new Rectangle(0, 0, Ancho, Alto), new Rectangle(0, 0, Imagen.Width, Imagen.Height), GraphicsUnit.Pixel);
                    //todos los cambios hechos en imagenBitmap lo llevaremos un Image(Imagen) con nuevos datos a travez de un MemoryStream
                    MemoryStream imagenMemoryStream = new MemoryStream();
                    imagenBitmap.Save(imagenMemoryStream, ImageFormat.Jpeg);
                    Imagen = Image.FromStream(imagenMemoryStream);
                }
            }
            return Imagen;
        }

        private Image Redimensionar(Image image, int SizeHorizontalPercent, int SizeVerticalPercent)
        {
            //Obntenemos el ancho y el alto a partir del porcentaje de tamaño solicitado
            int anchoDestino = image.Width * SizeHorizontalPercent / 100;
            int altoDestino = image.Height * SizeVerticalPercent / 100;
            //Obtenemos la resolucion original
            int resolucion = Convert.ToInt32(image.HorizontalResolution);

            return this.Redimensionar(image, anchoDestino, altoDestino, resolucion);
        }

        private byte[] ConvierteImagen(string strdir)
        {
            string[] split = null;
            string nom = "";
            string NombreArchivo = "";
            FileStream fs = new FileStream(strdir, FileMode.Open, FileAccess.Read);
            BinaryReader br = new BinaryReader(fs);
            byte[] data = null;
            nom = Path.GetFileName(strdir);
            split = nom.Split('.');
            NombreArchivo = split[0].ToString();
            data = br.ReadBytes(int.Parse(br.BaseStream.Length.ToString()));

            return data;
        }
        
    }
}
